package com.mis.horario;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


public class Parser {
	
	private String url;
	
	public Parser(String url){
		this.url=url;
	}
	
	public JSONObject getJson(){
		
		//Generando petición HTTP utilizando el método GET 
		//para referenciar a la URL del servidor

		HttpClient cliente = new DefaultHttpClient();
		
		//Estableciendo una petición GET
		HttpGet peticion = new HttpGet(url);
		
		JSONObject json =null;
		StringBuilder builder = new StringBuilder();
		
		try{
			//Ejecutando la petición y almacenandola en un objeto
			//de tipo HttpResponse
			HttpResponse respuesta = cliente.execute(peticion);
			
			// El 200 quiere decir que el estado de la respuesta es OK			
			if(respuesta.getStatusLine().getStatusCode()==200)
			{
				//Procesando la respuesta con un HttpEntity para obtener el contenido
				HttpEntity entity = respuesta.getEntity();
				InputStream contenido = entity.getContent();
					
				BufferedReader reader = 
							new BufferedReader(new InputStreamReader(contenido));
				String linea;
				//Vaciando contenido en un objeto de tipo StringBuilder
				while((linea=reader.readLine())!=null){
						builder.append(linea);
				}
				//Armando objeto de tipo JSONObject
				json=new JSONObject(builder.toString());
							
			}
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return json;
	}
	
	public ArrayList<Materia> getMaterias(){
		
		//Declarando un objeto de tipo ArrayList<Materia> para almacenar las materias
		ArrayList<Materia> materias = new ArrayList<Materia>();
		
		//Leyendo el objeto json
		JSONObject json = this.getJson();
		
		try {
			//Analizándo la respuesta del servidor y obteniendo el arreglo principal
			JSONArray materiasjson = json.getJSONArray("Materias");
			
			//Recorriendo el objeto materiasjson para crear cada materia
			for(int i=0;i<materiasjson.length();i++){
				JSONObject fila = materiasjson.getJSONObject(i);
				
				//Por cada objeto de tipo JSONObject crear un objeto de tipo materia
				//y agregarlo al objeto materias

				/*Materia m = new Materia();
				m.setHorario(fila.getString("horario"));
				m.setMaestro(fila.getString("profesor"));
				m.setTitulo(fila.getString("id"));
										
				materias.add(m);*/
				
				//************ DUDA ******* EN ESTA PARTE NO ESTOY MUY SEGURA SI ES ASÍ YA QUE
				//EN NUESTRO CASO EL CONSTRUCTOR DE MATERIA TIENE PARAMETROS Y EN EL EJEMPLO NO IGUAL.
				 materias.add(new Materia(
            			 fila.getLong("idMateria"), 
            			 fila.getString("nombre"),
            			 fila.getString("profesor"),
            			 fila.getInt("creditos"),
            			 fila.getString("email"),
            			 fila.getString("horario")
                         ));
				 
			}
			
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return materias;
	}
	
}
